package qgs.zisu.javaconcurrency.javaconcurrency.chapter9_ThreadCommunication;

/**
 * @Author: 蔡翔
 * @Date: 2019/10/12 20:03
 * @Version 1.0
 */
public class ProduceConsumerVersion1 {
    private int i = 1;
    final private Object LOCK = new Object();
    private void produce(){
        synchronized (LOCK){
            System.out.println("P->"+(i++));
        }
    }

    private void Consumer(){
        synchronized (LOCK){
            System.out.println("C->"+i);
        }
    }

    public static void main(String[] args) {
        ProduceConsumerVersion1 pc = new ProduceConsumerVersion1();
        new Thread("p"){
            @Override
            public void run() {
                while (true){
                    pc.produce();
                }
            }
        }.start();

        new Thread("c"){
            @Override
            public void run() {
                while (true){
                    pc.Consumer();
                }
            }
        }.start();

        //结果：都是p在生产，c只有碰到了才去消费，cpu调度片轮训到c，c那一个数据可能就被消费了多次。
        //造成上诉原因：是因为线程之间没有通讯。生产者新生产出来的数据没有通知给消费者所以消费者不知道
    }
}
